FortiGate VM の syslog 出力機能を利用して EC2(syslog サーバー)にログ出力してみた
こんにちは、大前です。
AWS 上に起動した FortiGate VM 上で取得されるログを syslog として別 EC2 に出力する機会がありましたので、内容を紹介させていただきます。
構成
以下の簡易的な構成で検証しました。FortiGate VM / syslog サーバ / 疎通確認用サーバ で計 3台の EC2 を構築しています。
今回は以下 AMI を利用して FortiGate VM を立ち上げました。
また、syslog サーバ / 疎通確認用サーバ はともに Amazon Linux 2 を利用しています。構成図には記載していませんが、VPC Endpoint を立てて Session Manager で接続可能な状態としています。
やってみた
0.FortiGate VM と疎通確認用サーバの構築
事前準備として FortiGate VM と疎通確認用サーバの構築が必要ですが、以下ブログの手順に従って構築しました。
上記ブログに手順が簡潔にまとまっているため、一通り実施することで下記状態の環境が構築ができるはずです。FortiGate VM からのログ出力設定については、出力先となる syslog サーバーの IP アドレスが必要になりますので、まだ実施しません。
1.syslog サーバの構築
続いて、FortiGate VM syslog サーバを構築します。
Amazon Linux 2 の EC2 を構築し、今回はプライベートサブネット上に配置します。特殊な設定は不要ですが、FortiGate VM は UDP 514 を利用して syslog を出力するため、Security Group で FortiGate VM からの UDP 514 が受け付けられる様にしておきます。
続いて、構築した EC2 を syslog サーバーとして利用するため、/etc/rsyslog.conf を修正します。修正ポイントは以下になります。
- syslog を受け付けられる様にするため、
$ModLoad imudp
等のコメントアウトを外す(16-17行目、20-21行目)※FortiGate VM は UDP 514 で syslog を送信してくるため、TCP のコメントアウトはそのままでも良いかもしれません。 - FortiGate VM から送られる syslog に対するルールを追加(41行目)
今回は facility が local0
のログを /var/log/fortilog
に出力するように設定しています。後述しますが、FortiGate VM 側の設定で syslog 出力に利用する facilityを変更し、上記のルールに合致するようにします。
$ cat /etc/rsyslog.conf # rsyslog configuration file # For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html # If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html #### MODULES #### # The imjournal module bellow is now used as a message source instead of imuxsock. $ModLoad imuxsock # provides support for local system logging (e.g. via logger command) $ModLoad imjournal # provides access to the systemd journal #$ModLoad imklog # reads kernel messages (the same are read from journald) #$ModLoad immark # provides --MARK-- message capability # Provides UDP syslog reception $ModLoad imudp $UDPServerRun 514 # Provides TCP syslog reception $ModLoad imtcp $InputTCPServerRun 514 (中略) #### RULES #### # Log all kernel messages to the console. # Logging much else clutters up the screen. #kern.* /dev/console # Log anything (except mail) of level info or higher. # Don't log private authentication messages! *.info;mail.none;authpriv.none;cron.none /var/log/messages (中略) # Save boot messages also to boot.log local7.* /var/log/boot.log # FortiGate syslog local0.* /var/log/fortilog (省略)
/etc/rsyslog.conf を更新したら、rsyslog を再起動しておきます。
sudo systemctl restart rsyslog
syslog サーバの設定については、下記ブログを参考にしました。
2.FortiGate VM の syslog 出力設定
最後に、FortiGate VM 側で syslog 出力設定を行います。
管理画面にログインし、「ログ&レポート」→「ログ設定」からログ設定画面を開きます。「ログを syslog へ送信」を有効化した上で、「IPアドレス/FQDN」に syslog サーバーとして構築した EC2 のプライベート IP アドレスを記載します。とりあえずログが出力されて欲しいので、「ログ設定」については "すべて" としておきます。最後に、「適用」をクリックしたらログ出力先の設定は完了です。
続いて、syslog サーバーの /etc/rsyslog.conf で定義したルールに合致する様に FortiGate VM から出力される syslog の facility を変更します。
同じく管理画面にて、画面右上あたりにある CLI アイコンをクリックして CLI コンソールを開きます。
CLI コンソールが開いたら、下記コマンドを実行し、出力される syslog の facility を変更します。(今回は "local0" に変更)
Fortigate1 # config log syslogd setting Fortigate1 (setting) # set facility local0 Fortigate1 (setting) # end
下記画像の様に、get log syslogd setting
をして変更内容が反映されていれば OK です。画像では変更前から "local0" になっていますが、いろいろ作業した後に取得したスクリーンショットなので誤りです。(本来はデフォルトで "local7" が利用されています)
3. syslog が出力されることを確認
設定が一通り完了したので、疎通確認サーバーから適当に ping 等を実行したところ、下記のように syslog サーバー上の /var/log/fortilog
にログが出力される事が確認できました。
おわりに
FortiGate VM の syslog 出力機能を利用して、syslog サーバーとして構築した EC2 上に syslog を出力してみました。
EC2 上に syslog を出力してしまえば、あとは syslog サーバー上で CloudWatch Agent や Fluentd を利用して S3 や CloudWatch Logs に FortiGate VM のログをためていくことも可能かと思います。
以上、AWS 事業本部の大前でした。